﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;

namespace TangoFamilyAndGuide.Site
{
    public partial class ExploradorPublicidad : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Entidades.Sesion sesion;
            if (!IsPostBack)
            {
                if (Funciones.SessionTimeOut(Session))
                {
                    Response.Redirect("~/SessionTimeout.aspx");
                }
                else
                {
                    sesion = (Entidades.Sesion)Session["Sesion"];
                    LeerListaPublicidad();
                    DataBind();
                }
             }
        }
        protected void SubirImagenButton_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = "";
            if (Funciones.SessionTimeOut(Session))
            {
                Response.Redirect("~/SessionTimeout.aspx");
            }
            else
            {
                Entidades.Sesion sesion = (Entidades.Sesion)Session["Sesion"];
                Boolean fileOK = false;
                String fileExtension = String.Empty;
                String path = Server.MapPath("~/ImagenesPublicidad/Catalogo1/Temp/");
                if (FileUpload1.HasFile)
                {
                    fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
                    String[] allowedExtensions = { ".jpg", ".png", ".jpeg", ".gif" };
                    for (int i = 0; i < allowedExtensions.Length; i++)
                    {
                        if (fileExtension == allowedExtensions[i])
                        {
                            fileOK = true;
                            break;
                        }
                    }
                }
                if (fileOK)
                {
                    try
                    {
                        if (FileUpload1.FileBytes.Length > 1048576)
                        {
                            MensajeLabel.Text = "The selected file exceeds maximum of 1Mb.";
                        }
                        else
                        {
                            Entidades.Publicidad Publicidad = (Entidades.Publicidad)Session["Publicidad"];
                            FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName);
                            string[] archivos = System.IO.Directory.GetFiles(path, FileUpload1.FileName, System.IO.SearchOption.TopDirectoryOnly);
                            if (archivos.Length != 0)
                            {
                                ImageParaAgregar.ImageUrl = "~/ImagenesPublicidad/Catalogo1/Temp/" + archivos[0].Replace(Server.MapPath("~/ImagenesPublicidad/Catalogo1/Temp/"), String.Empty);
                                ViewState["ImagenParaAgregar"] = FileUpload1.FileName;
                                ImageUrlTextBox.ReadOnly = false;
                                ImageUrlTextBox.Text = FileUpload1.FileName;
                                ImageUrlTextBox.ReadOnly = true;
                            }
                            else
                            {
                                MensajeLabel.Text = "This image exist in the temporal folder.<br />";
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MensajeLabel.Text = "Problems uploading your file.<br />" + EX.Funciones.Detalle(ex);
                    }
                }
                else
                {
                    MensajeLabel.Text = "Wrong file type.";
                }
            }
        }
        protected void CancelarImagenButton_Click(object sender, EventArgs e)
        {
            //Borrar datos de los campos junto con la imagen preview.
            ImageUrlTextBox.Text = "";
            NavigateUrlTextBox.Text = "";
            AlternateTextTextBox.Text = "";
            ImpressionTextBox.Text = "";
            KeywordTextBox.Text = "";
            MensajeLabel.Text = "";
        }
        protected void AgregarImagenButton_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = "";
            if (Funciones.SessionTimeOut(Session))
            {
                Response.Redirect("~/SessionTimeout.aspx");
            }
            else
            {
                if (ImageUrlTextBox.Text == "")
                {
                    MensajeLabel.Text = "Usted debe hacer el Upload Selected Image previamente.";
                    return;
                }
                if (ImpressionTextBox.Text == "")
                {
                    MensajeLabel.Text = "Debe informar el campo Impression.";
                    return;
                }
                Entidades.Sesion sesion = (Entidades.Sesion)Session["Sesion"];
                string path = Server.MapPath("~/ImagenesPublicidad/Catalogo1/");
                string pathTemp = Server.MapPath("~/ImagenesPublicidad/Catalogo1/Temp/");
                string[] archivos = System.IO.Directory.GetFiles(pathTemp, (string)ViewState["ImagenParaAgregar"], System.IO.SearchOption.TopDirectoryOnly);
                if (archivos.Length > 0)
                {
                    string fileName = System.IO.Path.GetFileName(archivos[0]);
                    //Verifico si el nombre de archivo de la imagen ya existe.
                    if (System.IO.File.Exists(path + fileName))
                    {
                        MensajeLabel.Text = "Ya existe una imagen con este nombre de archivo. Seleccione otra imagen.";
                        return;
                    }
                    Entidades.Publicidad publicidad = new Entidades.Publicidad();
                    publicidad.Catalogo = CatalogoTextBox.Text;
                    publicidad.ImageUrl = ImageUrlTextBox.Text;
                    publicidad.NavigateUrl = NavigateUrlTextBox.Text;
                    publicidad.AlternateText = AlternateTextTextBox.Text;
                    publicidad.Impression = ImpressionTextBox.Text;
                    publicidad.Keyword = KeywordTextBox.Text;
                    int IdPublicidad = 0;
                    RN.Publicidad.Crear(out IdPublicidad, publicidad, sesion);
                    System.IO.File.Copy(pathTemp + archivos[0].Replace(Server.MapPath("~/ImagenesPublicidad/Catalogo1/Temp/"), String.Empty), path + fileName, true);
                    System.IO.File.Delete(archivos[0]);
                    ImageParaAgregar.ImageUrl = "~/Imagenes/Interrogacion.jpg";
                    MensajeLabel.Text = "La imagen se incorporó satisfactoriamente. (Id." + IdPublicidad.ToString() + ")";
                    ImageUrlTextBox.Text = "";
                    NavigateUrlTextBox.Text = "";
                    AlternateTextTextBox.Text = "";
                    ImpressionTextBox.Text = "";
                    KeywordTextBox.Text = "";
                    CrearArchivoXML();
                    LeerListaPublicidad();
                }
            }
        }
        protected void BorrarImagenButton_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = "";
            if (Funciones.SessionTimeOut(Session))
            {
                Response.Redirect("~/SessionTimeout.aspx");
            }
            else
            {
                String path = Server.MapPath("~/ImagenesPublicidad/Catalogo1/Temp/");
                Entidades.Sesion sesion = (Entidades.Sesion)Session["Sesion"];
                string imagenParaAgregar = (string)ViewState["ImagenParaAgregar"];
                string[] archivos = System.IO.Directory.GetFiles(path, imagenParaAgregar, System.IO.SearchOption.TopDirectoryOnly);
                for (int i = 0; i < archivos.Length; i++)
                {
                    ImageUrlLabel.Text = "";
                    System.IO.File.Delete(archivos[i]);
                    ImageParaAgregar.ImageUrl = "~/Imagenes/Interrogacion.jpg";
                }
            }
        }

        private void CrearArchivoXML()
        {
            List<Entidades.Publicidad> lista;
            int CantidadFilas = 0;
            lista = RN.Publicidad.Lista(out CantidadFilas, PublicidadPagingGridView.PageIndex, PublicidadPagingGridView.PageSize, PublicidadPagingGridView.OrderBy, "", "", Session.SessionID, (Entidades.Sesion)Session["Sesion"]);
            PublicidadPagingGridView.VirtualItemCount = CantidadFilas;
            String path = Server.MapPath("~/ImagenesPublicidad/Catalogo1/");
            RN.Publicidad.CrearArchivoXML(lista, path, "Catalogo1.xml", (Entidades.Sesion)Session["Sesion"]);
        }

        private void LeerListaPublicidad()
        {
            List<Entidades.Publicidad> lista;
            int CantidadFilas = 0;
            lista = RN.Publicidad.Lista(out CantidadFilas, PublicidadPagingGridView.PageIndex, PublicidadPagingGridView.PageSize, PublicidadPagingGridView.OrderBy, "", "", Session.SessionID, (Entidades.Sesion)Session["Sesion"]);
            PublicidadPagingGridView.VirtualItemCount = CantidadFilas;
            ViewState["lista"] = lista;
            PublicidadPagingGridView.DataSource = lista;
            PublicidadPagingGridView.DataBind();
        }

        protected void PublicidadPagingGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                DesSeleccionarFilas();
                PublicidadPagingGridView.PageIndex = e.NewPageIndex;
                List<Entidades.Publicidad> lista;
                int CantidadFilas = 0;
                lista = RN.Publicidad.Lista(out CantidadFilas, PublicidadPagingGridView.PageIndex, PublicidadPagingGridView.PageSize, PublicidadPagingGridView.OrderBy, "", "", Session.SessionID, (Entidades.Sesion)Session["Sesion"]);
                PublicidadPagingGridView.VirtualItemCount = CantidadFilas;
                ViewState["lista"] = lista;
                PublicidadPagingGridView.DataSource = lista;
                PublicidadPagingGridView.DataBind();
            }
            catch (System.Threading.ThreadAbortException)
            {
                Trace.Warn("Thread abortado");
            }
            catch (Exception ex)
            {
                //CedeiraUIWebForms.Excepciones.Redireccionar(ex, "~/Excepcion.aspx");
                MensajeLabel.Text = ex.Message;
            }
        }
        protected void PublicidadPagingGridView_Sorting(object sender, GridViewSortEventArgs e)
        {
            try
            {
                DesSeleccionarFilas();
                List<Entidades.Publicidad> lista = new List<Entidades.Publicidad>();
                int CantidadFilas = 0;
                lista = RN.Publicidad.Lista(out CantidadFilas, PublicidadPagingGridView.PageIndex, PublicidadPagingGridView.PageSize, PublicidadPagingGridView.OrderBy, "", "", Session.SessionID, (Entidades.Sesion)Session["Sesion"]);
                ViewState["lista"] = lista;
                PublicidadPagingGridView.DataSource = (List<Entidades.Publicidad>)ViewState["lista"];
                PublicidadPagingGridView.DataBind();
            }
            catch (System.Threading.ThreadAbortException)
            {
                Trace.Warn("Thread abortado");
            }
            catch (Exception ex)
            {
                //CedeiraUIWebForms.Excepciones.Redireccionar(ex, "~/Excepcion.aspx");
                MensajeLabel.Text = ex.Message;
            }
        }
        protected void PublicidadPagingGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Attributes["onmouseover"] = "this.style.cursor='hand';this.style.textDecoration='underline';";
                e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";

                //Color por estado distinto a Active
                if (e.Row.Cells[7].Text != "Active")
                {
                    e.Row.ForeColor = Color.Red;
                }
                //DropDownList ddlTipoDestacado = (DropDownList)e.Row.FindControl("ddlTipoDestacado");
                //if (ddlTipoDestacado != null)
                //{
                //    ddlTipoDestacado.DataSource = Entidades.TiposDestacado.TipoDestacado.ListaMasSinInformar();
                //    ddlTipoDestacado.DataBind();
                //    ddlTipoDestacado.SelectedValue = PublicidadPagingGridView.DataKeys[e.Row.RowIndex].Values[0].ToString();
                //}
            }
        }
        private void DesSeleccionarFilas()
        {
            PublicidadPagingGridView.SelectedIndex = -1;
        }

        protected void PublicidadPagingGridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int item = Convert.ToInt32(e.CommandArgument);
            List<Entidades.Publicidad> lista = (List<Entidades.Publicidad>)ViewState["lista"];
            Entidades.Publicidad publicidad = lista[item];
            switch (e.CommandName)
            {
                case "Detalle":
                    Session["Publicidad"] = publicidad;
                    Response.Redirect("~/PublicidadDetallada.aspx");
                    break;
                case "CambiarEstado":
                    Session["Publicidad"] = publicidad;
                    Entidades.Evento Evento;
                    RN.Publicidad.EventoPosible(out Evento, publicidad, (Entidades.Sesion)Session["Sesion"]);
                    TituloConfirmacionLabel.Text = "Confirmar " + Evento.DescrEvento;
                    IdCatalogoPopupLabel.Text = publicidad.Catalogo;
                    IdPublicidadPopupLabel.Text = publicidad.Id.ToString();
                    ImageUrlPopupLabel.Text = publicidad.ImageUrl;
                    NavigateUrlPopupLabel.Text = publicidad.NavigateUrl;
                    AlternateTextPopupLabel.Text = publicidad.AlternateText;
                    ImpressionPopupLabel.Text = publicidad.Impression;
                    KeywordPopupLabel.Text = publicidad.Keyword;  
                    EstadoPopupLabel.Text = publicidad.WF.Estado;
                    UsuarioPopupLabel.Text = publicidad.Usuario.Id;
                    ViewState["Publicidad"] = publicidad;
                    ModalPopupExtender1.Show();
                    break;
                case "Delete":
                    RN.Publicidad.Eliminar(publicidad, (Entidades.Sesion)Session["Sesion"]);
                    try
                    {
                        CrearArchivoXML();
                        string path = Server.MapPath("~/ImagenesPublicidad/Catalogo1/");
                        System.IO.File.Delete(path + publicidad.ImageUrl);
                    }
                    catch 
                    { 
                    }
                    LeerListaPublicidad();
                    break;
            }
        }
        protected void PublicidadPagingGridView_RowEditing(object sender, GridViewEditEventArgs e)
        {
            PublicidadPagingGridView.EditIndex = e.NewEditIndex;
            PublicidadPagingGridView.DataSource = ViewState["lista"];
            PublicidadPagingGridView.DataBind();
        }
        protected void PublicidadPagingGridView_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            PublicidadPagingGridView.EditIndex = -1;
            PublicidadPagingGridView.DataSource = ViewState["lista"];
            PublicidadPagingGridView.DataBind();
        }
        protected void PublicidadPagingGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            try
            {
                List<Entidades.Publicidad> publicidades = ((List<Entidades.Publicidad>)ViewState["lista"]);
                Entidades.Publicidad publicidadActual = RN.Publicidad.ObtenerCopia(publicidades[e.RowIndex]);
                Entidades.Publicidad publicidad = publicidades[e.RowIndex];

                string navigateUrl = ((TextBox)PublicidadPagingGridView.Rows[e.RowIndex].FindControl("txtNavigateUrl")).Text;
                string alternateText = ((TextBox)PublicidadPagingGridView.Rows[e.RowIndex].FindControl("txtAlternateText")).Text;
                string impression = ((TextBox)PublicidadPagingGridView.Rows[e.RowIndex].FindControl("txtImpression")).Text;
                string keyword = ((TextBox)PublicidadPagingGridView.Rows[e.RowIndex].FindControl("txtKeyword")).Text;
                //string tipoDestacado = ((DropDownList)PublicidadPagingGridView.Rows[e.RowIndex].FindControl("ddlTipoDestacado")).SelectedValue;
                if (impression != string.Empty)
                {
                    publicidad.Impression = impression;
                }
                else
                {
                    throw new Exception("Debe informar el campo Impression. No puede estar vacío.");
                }
                publicidad.NavigateUrl = navigateUrl;
                publicidad.AlternateText = alternateText;
                publicidad.Keyword = keyword;
                RN.Publicidad.Modificar(publicidadActual, publicidad, (Entidades.Sesion)Session["Sesion"]);
                CrearArchivoXML();
                PublicidadPagingGridView.EditIndex = -1;
                PublicidadPagingGridView.DataSource = ViewState["lista"];
                PublicidadPagingGridView.DataBind();
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(this, GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + ex.Message.ToString().Replace("'", "") + "');</SCRIPT>", false);
            }
        }
        protected void PublicidadPagingGridView_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        protected void PublicidadPagingGridView_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
        }

        protected void CambiarEstadoButton_Click(object sender, EventArgs e)
        {
            if (Funciones.SessionTimeOut(Session))
            {
                Response.Redirect("~/SessionTimeout.aspx");
            }
            else
            {
                try
                {
                    Entidades.Sesion sesion = (Entidades.Sesion)Session["Sesion"];
                    Entidades.Publicidad publicidad = (Entidades.Publicidad)ViewState["Publicidad"];
                    Entidades.Evento Evento;
                    RN.Publicidad.EventoPosible(out Evento, publicidad, sesion);
                    RN.Publicidad.CambiarEstado(publicidad, Evento.Id, Evento.EstadoHst, sesion);
                    //BuscarButton_Click(BuscarButton, new EventArgs());
                    Funciones.PersonalizarControlesMaster(Master, true, sesion);
                }
                catch (Exception ex)
                {
                    MensajeLabel.Text = "Problemas al cambiar el estado de la Publicidad." + ex.Message;
                }
            }
        }

        protected void PublicidadPagingGridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {

        }

        protected void PublicidadPagingGridView_RowDeleted(object sender, GridViewDeletedEventArgs e)
        {

        }

    }
}